package com.survey.wxapp.util;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import java.security.Key;
import java.security.Security;
import java.util.Base64;

public class WeChatDecryptUtils {

    static {
        // 在程序初始化时注册 Bouncy Castle 提供的加密库
        Security.addProvider(new BouncyCastleProvider());
    }

    private static final String ALGORITHM = "AES";
    private static final String CHARSET = "UTF-8";

    public static String decryptPhoneNumber(String encryptedData, String iv, String sessionKey) throws Exception {
        // 解码
        byte[] dataByte = Base64.getDecoder().decode(encryptedData);
        byte[] ivByte = Base64.getDecoder().decode(iv);
        byte[] sessionKeyByte = Base64.getDecoder().decode(sessionKey);

        // 使用 sessionKeyByte 创建 Key 对象
        Key key = new javax.crypto.spec.SecretKeySpec(sessionKeyByte, ALGORITHM);

        // 创建 IvParameterSpec 对象，传入 IV
        IvParameterSpec ivSpec = new IvParameterSpec(ivByte);

        // 使用 Bouncy Castle 提供的 Cipher 类
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");  // 使用 Bouncy Castle 的 AES
        cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);  // 使用 key 和 ivSpec 初始化解密器

        // 解密数据
        byte[] resultByte = cipher.doFinal(dataByte);
        return new String(resultByte, CHARSET);  // 结果是 JSON 字符串
    }
}
